Python之路 - 特殊成员方法
__doc__ 🍀
查看类的描述信息
1 | class Foo: |
__module__ 🍀
查看当前操作对象位于哪个模块
1 | # my_module.py |
1 | # test.py |
__class__ 🍀
查看对象的类
1 | class Foo: |
__new__ \ __init__ 🍀
__new__
创建对象时 , 自动触发执行 , 会返回当前对象的一个实例
__init__
构造方法 , 创建对象时 , 自动触发执行 , 初始化对象的属性
python中的__init__ 在执行的时候 , 其实已经进行实例化了一次 , __init__ 有一个参数self , 就是__new__ 方法返回的实例
__del__ 🍀
析构方法 , 通当对象在内存中被释放时 , 自动触发执行
此方法一般无须定义 , 因为Python是一门高级语言 , 程序员在使用时无需关心内存的分配和释放 , 因为此工作都是交给Python解释器来执行 , 所以 , 析构方法是由解释器在进行垃圾回收时自动触发执行的 (Python采用 ‘ 引用计数 ‘ 的算法方式处理)
1 | class A: |
__call__ 🍀
对象后面加括号 , 触发执行
构造方法的执行是由创建对象触发的 , 而对于__call__ 方法的执行是由对象后加括号触发的
1 | class A: |
__dict__ 🍀
查看类或对象中的所有成员
1 | class Person: |
__str__ \ __repr__ 🍀
改变对象的字符串显示 , 这两个方法都只能返回字符串
__str__ ()用于显示给用户,而__repr__ ()用于显示给开发人员 , 也就是在终端下print(Class)则会调用__repr__
,非终端下会调用__str__
方法 , 并且__str__ 能够友好的显示__repr__ 方法返回的字符串 , 反之则不能友好的显示
1 | class A: |
item 🍀
__getitem__ , __setitem__ , __delitem__
用于索引操作 , 如字典 , 以上分别表示获取 , 设置 , 删除数据
1 | class Foo(object): |
__eq__ 🍀
定义类里的 == 行为
1 | class A(object): |
一道面试题
1 | class Person: |
在定义一个类时,如果我们需要改写该类的__eq__ 函数,特别要注意的是它将会变为不可哈希对象,也就是说如果你将它放到哈希集会报错